﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Diagnostics;
using System.Configuration;

namespace Wicresoft.EKA.MVCExtensions
{
    public static class CMD
    {
        ///   <summary> 
        ///  执行DOS命令，返回DOS命令的输出
        ///   </summary> 
        ///   <param name="dosCommand"> dos命令 </param> 
        ///   <param name="milliseconds"> 等待命令执行的时间（单位：毫秒），如果设定为0，则无限等待 </param> 
        ///   <returns> 返回输出，如果发生异常，返回空字符串 </returns> 
        public static string Run(string command, string paramss, int milliseconds=0)
        {
            string commandLocation = ConfigurationManager.AppSettings[command];
            string output = "";  // 输出字符串 
            if (string.IsNullOrWhiteSpace(commandLocation)) 
                throw new Exception("please insert the " + command + " command in the AppSetting of the config");
            Process process = new Process();  // 创建进程对象 
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = commandLocation;  // 设定需要执行的命令 
            startInfo.Arguments = " /C  " + paramss;  // 设定参数，其中的“/C”表示执行完命令后马上退出
            startInfo.Arguments = paramss;  // 设定参数，其中的“/C”表示执行完命令后马上退出
            startInfo.UseShellExecute = false;  // 不使用系统外壳程序启动 
            startInfo.RedirectStandardInput = false;  // 不重定向输入 
            startInfo.RedirectStandardOutput = true;  // 重定向输出 
            startInfo.CreateNoWindow = true;  // 不创建窗口 
            process.StartInfo = startInfo;
            try
            {
                if (process.Start())  // 开始进程 
                {
                    if (milliseconds == 0)
                        process.WaitForExit();  // 这里无限等待进程结束 
                    else
                        process.WaitForExit(milliseconds);  // 这里等待进程结束，等待时间为指定的毫秒 
                    output = process.StandardOutput.ReadToEnd(); // 读取进程的输出 
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                if (process != null)
                    process.Close();
            }
            return output;
        }

    }
}
